const express = require('express')
const app = express()
const { Sequelize, DataTypes } = require('sequelize')
const initModels = require('./models/init-models')

// 创建 Sequelize 实例，同时配置数据库连接信息
const sequelize = new Sequelize('erqiao', 'root', 'root', {
  host: 'localhost',
  dialect: 'mysql',
  timezone: '+08:00', // 指定时区为东八区
  port: 3306, // MySQL 默认的端口号是 3306，
  pool: {
    max: 5,
    min: 0,
    acquire: 30000, // 这个选项定义了在获取数据库连接时的最大等待时间（毫秒）。如果连接池中的所有连接都被占用，并且超过了这个时间仍未获取到可用连接，将抛出一个错误。
    idle: 10000, // 这个选项定义了连接池中连接闲置的最大时间（毫秒）。如果连接在连接池中处于闲置状态并且超过了这个时间，连接将被释放（关闭）
  },
})

async function test() {
  try {
    await sequelize.authenticate()
    console.log('mysql连接成功')
  } catch (error) {
    console.log('mysql连接失败')
  }
}

test()

const models = initModels(sequelize)

const students = sequelize.define('students', {
  student_id: {
    type: DataTypes.INTEGER.UNSIGNED,
    primaryKey: true, // 主键
    autoIncrement: true, // 自动增长
  },
  name: {
    type: DataTypes.STRING(100),
    defaultValue: '', // 默认值
    comment: '名字', // 注释
  },
  age: {
    type: DataTypes.INTEGER,
    defaultValue: 0,
  },
})

sequelize
  .sync()
  //   .sync({ force: true }) //强制同步（慎用,会清空表全部数据）
  //   .sync({ alter: true }) // 同步表结构(数据还在)
  .then(() => {
    console.log('数据库同步成功')
  })
  .catch((err) => {
    console.error('数据库同步失败:', err)
  })

// 获取
app.get('/getInfo', async (req, res) => {
  let result = await students.findAll()
  res.json(result)
})

// 增
app.get('/addInfo', (req, res) => {
  students
    .create({
      name: '携卿终',
      age: '23',
    })
    .then((data) => {
      res.json('插入成功，用户信息：', data.toJSON())
    })
    .catch((err) => {
      console.error('插入失败:', err)
    })
})

// 删
app.get('/delInfo', async (req, res) => {
  await students.destroy({ where: { student_id: 3 } })
  res.json('删除成功')
})

// 改
app.get('/upInfo', async (req, res) => {
  await students.update({ name: '长江贰桥' }, { where: { student_id: '1' } })
  res.json('修改成功')
})

// 查
app.get('/getTag', async (req, res) => {
  let result = await models.article.findAll()
  res.json(result)
})

app.listen(4050, () => {
  console.log('server is runnning at port 4050')
})
